// axios基础的封装
import axios from "axios";
import { ElMessage } from "element-plus";
import { useUserStore } from "@/stores/userStore";

const httpInstance = axios.create({
  baseURL: import.meta.env.VITE_PC_BASE_API,
  timeout: 5000,
});

// 拦截器

// axios请求拦截器
httpInstance.interceptors.request.use(
  (config) => {
    // 1. 从pinia获取token数据
    const userStore = useUserStore();
    // 2. 按照后端的要求拼接token数据
    // const token = userStore.userInfo.token;
    const token = userStore.userToken.accessToken;
    if (token) {
      config.headers.Authorization = `${token}`;
    }
    return config;
  },
  (e) => Promise.reject(e)
);

// axios响应式拦截器
httpInstance.interceptors.response.use(
  (res) => {
    // 未设置状态码则默认成功状态
    const code = res.data.code || "00000";
    const success = res.data.success;
    const msg = res.data.msg;
    if (!success) {
      // 整体报错 后有针对code的报错再修改
      ElMessage({
        type: "error",
        message: msg,
      });
      return Promise.reject(new Error(msg));
    } else {
      return Promise.resolve(res.data);
    }
  },
  (e) => {
    // 统一错误提示
    ElMessage({
      type: "warning",
      message: e.response.data.message,
    });
    return Promise.reject(e);
  }
);

export default httpInstance;
